package com.tool.grab.vpn.header;

public class Packet {
    protected byte[] bytes;
    protected int offset;
    protected int validLength;
    protected Packet packet;
    /**
     *
     * @param bytes 收到的byte数据集合
     * @param parameters 一些参数 如：数据偏移 有效长度
     */
    public Packet(byte[] bytes,int... parameters){
        this.bytes = bytes;
        if(parameters != null){
            if(parameters.length > 0){
                offset = parameters[0];
                if(parameters.length > 1){
                    validLength = parameters[1];
                }
            }
        }

        if(validLength == 0){
            validLength = bytes.length;
        }else if(validLength > bytes.length){
            validLength = bytes.length;
        }
    }

    /**
     * 获取下级协议
     * @return
     */
    public Packet getPacket() {
        return packet;
    }

    /**
     * 设置下级协议 从上至下依次为 HTTP/HTTPS -> TCP/UDP -> IP
     * @param packet
     */
    public void setPacket(Packet packet) {
        this.packet = packet;
    }

    /**
     * 获取数据
     * @return
     */
    public byte[] getBytes(){
        return bytes;
    }

    /**
     * 获取数据偏移
     * @return
     */
    public int getOffset(){
        return offset;
    }

    /**
     * 获取数据有效长度
     * @return
     */
    public int getValidLength(){
        return validLength;
    }

    /**
     * 获取报头长度
     * @return
     */
    public int getHeaderLength(){
        return 0;
    }

    /**
     * 获取数据长度
     * @return
     */
    public int getDataLength(){
        int length = validLength - offset - getHeaderLength();
        if(length < 0)length = 0;
        return length;
    }
}
